/**
 * @see https://leetcode-cn.com/problems/multiply-strings/
 * 给定两个以字符串形式表示的非负整数 num1 和 num2，返回 num1 和 num2 的乘积，它们的乘积也表示为字符串形式
 * @param {string} num1
 * @param {string} num2
 * @return {string}
 */
var multiply = function(num1, num2) {
  if(num1 === '0' || num2 === '0') {
    return '0'
  }
  let store = [];
  let max = num1.length + num2.length;
  for (let i = 0; i < num1.length; i++) {
    const v1 = num1[i];
    for (let j = 0; j < num2.length; j++) {
      const v2 = num2[j];
      if(!store[j]) {
        store[j] = [].concat(new Array(j - i).fill(0));
      }
      store[j].push(v1 * v2);
    }
  }
  // 找出最长的数组，计算矩阵相加
  max = store[store.length - 1].length;
  let result = [];
  let pre = 0;
  for (i = max-1; i >= 0; i--) {
    let cur = 0;
    for (let j = store.length - 1; j >= 0; j--) {
      const vs = store[j][i];
      if(typeof vs === 'undefined') {
        break;
      }
      cur += vs;
    }
    cur += pre;
    // 余数
    let mod = cur % 10;
    // 往前进位
    pre = Math.floor(cur/10);
    result.push(mod);
  }
  pre && result.push(pre);
  return result.reverse().join('');
};

console.log(multiply('9111111', '123123'));
// 1 2 3 * 4 = 4 8 12  
// 1 2 3 * 5 = 0 5 10 15  
// 1 2 3 * 6 = 0 0 6  12  18 


// 1 2 3 * 7    = 0 0 0  7   14 21 0
// 123 * 8      = 0 0 0  0   8  16 24

//             5  6   0   8  8

//       4   5   6
//   1   4   5   6
//   2   48  60  72
//   3   492 615 738



